@echo off
chcp 65001 >nul
echo ========================================
echo           VSCode缓存清理工具
echo ========================================
echo.

:: 设置VSCode缓存目录路径
set "VSCODE_USER_DATA=%APPDATA%\Code"
set "VSCODE_EXTENSIONS=%USERPROFILE%\.vscode\extensions"
set "VSCODE_CACHE=%APPDATA%\Code\Cache"
set "VSCODE_GPUCACHE=%APPDATA%\Code\GPUCache"
set "VSCODE_CODELENS=%APPDATA%\Code\CachedData"
set "VSCODE_LOGS=%APPDATA%\Code\logs"
set "VSCODE_SESSION=%APPDATA%\Code\sessions"
set "VSCODE_WORKSPACE_STORAGE=%APPDATA%\Code\User\workspaceStorage"

echo 正在清理VSCode缓存文件...
echo.

:: 检查VSCode是否正在运行
tasklist /FI "IMAGENAME eq Code.exe" 2>NUL | find /I /N "Code.exe">NUL
if "%ERRORLEVEL%"=="0" (
    echo [警告] 检测到VSCode正在运行，建议先关闭VSCode再执行清理
    echo.
    set /p confirm="是否继续清理？(y/n): "
    if /i not "%confirm%"=="y" (
        echo 清理已取消
        pause
        exit /b 0
    )
    echo.
)

:: 清理缓存目录
echo [1/8] 清理主缓存目录...
if exist "%VSCODE_CACHE%" (
    rmdir /s /q "%VSCODE_CACHE%" 2>nul
    if exist "%VSCODE_CACHE%" (
        echo    - 主缓存目录清理失败，可能被占用
    ) else (
        echo    - 主缓存目录清理成功
    )
) else (
    echo    - 主缓存目录不存在
)

:: 清理GPU缓存
echo [2/8] 清理GPU缓存...
if exist "%VSCODE_GPUCACHE%" (
    rmdir /s /q "%VSCODE_GPUCACHE%" 2>nul
    if exist "%VSCODE_GPUCACHE%" (
        echo    - GPU缓存清理失败，可能被占用
    ) else (
        echo    - GPU缓存清理成功
    )
) else (
    echo    - GPU缓存目录不存在
)

:: 清理代码镜头缓存
echo [3/8] 清理代码镜头缓存...
if exist "%VSCODE_CODELENS%" (
    rmdir /s /q "%VSCODE_CODELENS%" 2>nul
    if exist "%VSCODE_CODELENS%" (
        echo    - 代码镜头缓存清理失败，可能被占用
    ) else (
        echo    - 代码镜头缓存清理成功
    )
) else (
    echo    - 代码镜头缓存目录不存在
)

:: 清理日志文件
echo [4/8] 清理日志文件...
if exist "%VSCODE_LOGS%" (
    rmdir /s /q "%VSCODE_LOGS%" 2>nul
    if exist "%VSCODE_LOGS%" (
        echo    - 日志文件清理失败，可能被占用
    ) else (
        echo    - 日志文件清理成功
    )
) else (
    echo    - 日志目录不存在
)

:: 清理会话文件
echo [5/8] 清理会话文件...
if exist "%VSCODE_SESSION%" (
    rmdir /s /q "%VSCODE_SESSION%" 2>nul
    if exist "%VSCODE_SESSION%" (
        echo    - 会话文件清理失败，可能被占用
    ) else (
        echo    - 会话文件清理成功
    )
) else (
    echo    - 会话目录不存在
)

:: 清理工作区存储
echo [6/8] 清理工作区存储...
if exist "%VSCODE_WORKSPACE_STORAGE%" (
    rmdir /s /q "%VSCODE_WORKSPACE_STORAGE%" 2>nul
    if exist "%VSCODE_WORKSPACE_STORAGE%" (
        echo    - 工作区存储清理失败，可能被占用
    ) else (
        echo    - 工作区存储清理成功
    )
) else (
    echo    - 工作区存储目录不存在
)

:: 清理扩展缓存
echo [7/8] 清理扩展缓存...
if exist "%VSCODE_EXTENSIONS%" (
    echo    正在清理扩展缓存，这可能需要一些时间...
    for /d %%i in ("%VSCODE_EXTENSIONS%\*") do (
        if exist "%%i\out" rmdir /s /q "%%i\out" 2>nul
        if exist "%%i\node_modules" rmdir /s /q "%%i\node_modules" 2>nul
        if exist "%%i\.vscode-test" rmdir /s /q "%%i\.vscode-test" 2>nul
    )
    echo    - 扩展缓存清理完成
) else (
    echo    - 扩展目录不存在
)

:: 清理临时文件
echo [8/8] 清理临时文件...
set "TEMP_FILES=%TEMP%\vscode*"
if exist "%TEMP_FILES%" (
    del /f /q "%TEMP_FILES%" 2>nul
    echo    - 临时文件清理完成
) else (
    echo    - 没有找到VSCode临时文件
)

echo.
echo ========================================
echo           清理完成！
echo ========================================
echo.
echo 清理内容：
echo - VSCode主缓存目录
echo - GPU缓存
echo - 代码镜头缓存
echo - 日志文件
echo - 会话文件
echo - 工作区存储
echo - 扩展缓存
echo - 临时文件
echo.
echo 建议：
echo 1. 重启VSCode以应用清理效果
echo 2. 如果某些文件清理失败，请确保VSCode已完全关闭
echo 3. 清理后首次启动VSCode可能会稍慢，这是正常现象
echo.
pause